package com.example.user.sentinel;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * sentinel授权规则：
 * Sentinel是通过RequestOriginParser接口的parseOrigin来获取请求的来源的。
 * 这个方法的作用就是从request对象中，获取请求者的origin值并返回。
 * 但是，可惜的是，默认情况下，sentinel不管请求者从哪里来，返回值永远是default，也就是说一切请求的来源都被认为是一样的值default。
 * 因此，我们需要自定义这个接口的实现！！！让不同的请求，返回不同的origin。
 */
@Component
@Slf4j
public class HeaderOriginParser implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest request) {
        // 1.获取请求头
        String origin = request.getHeader("origin");
        // 2.非空判断
        if (StringUtils.isEmpty(origin)) {
            origin = "blank";
        }
        log.info("origin = {}", origin);
        return origin;
    }
}